home *** CD-ROM | disk | FTP | other *** search
/ Revolution - Das Atari CD Magazin 1997 / Revolution - Das Atari CD Magazin 1.iso / software / anwendng / qed_397 / sourcen / trash.c < prev    next >
C/C++ Source or Header  |  1996-12-29  |  6KB  |  233 lines

  1. #include "global.h"
  2. #include "windows.h"
  3. #include "text.h"
  4. #include "edit.h"
  5. #include "desktop.h"
  6. #include "rsc.h"
  7. #include "icon.h"
  8. #include "trash.h"
  9. #include "set.h"
  10.  
  11. /* exportierte Variablen ***************************************************/
  12. WORD    itrash, trash_type;
  13.  
  14.  
  15. /****** DEFINES ************************************************************/
  16.  
  17. #define KIND    (NAME|CLOSER|FULLER|MOVER|SIZER|UPARROW|DNARROW|VSLIDE|LFARROW|RTARROW|HSLIDE)
  18. #define FLAGS    (WI_TEXT|WI_FONTSIZE)
  19.  
  20. /****** TYPES **************************************************************/
  21.  
  22. /****** VARIABLES **********************************************************/
  23.  
  24. LOCAL TEXTP    trash_text;
  25.  
  26. /****** FUNCTIONS **********************************************************/
  27.  
  28. LOCAL BOOLEAN    wi_key        (WINDOWP window, MKINFO *mk);
  29.  
  30. LOCAL VOID        icon_exist    (WORD icon, SET actions);
  31. LOCAL BOOLEAN    icon_test    (WORD icon, WORD action);
  32. LOCAL WORD        icon_edit    (WORD icon, WORD action);
  33. LOCAL BOOLEAN    icon_drag    (WORD icon, WORD source);
  34.  
  35. LOCAL VOID        crt_trash    (WORD icon, WINDOWP window);
  36. LOCAL BOOLEAN    open_trash    (WORD icon);
  37.  
  38. /***************************************************************************/
  39.  
  40. LOCAL VOID icon_exist(WORD icon, SET actions)
  41. {
  42.     setclr(actions);
  43.     setincl(actions,DO_CLEAR);
  44.     setincl(actions,DO_CLOSE);
  45.     setincl(actions,DO_OPEN);
  46.     setincl(actions,DO_INFO);
  47.     setincl(actions,DO_DESTRUCT);
  48.     setincl(actions,DO_HELP);
  49.     setincl(actions,DO_INIT);
  50.     setincl(actions,DO_REINIT);
  51. }
  52.  
  53. LOCAL BOOLEAN icon_test(WORD icon, WORD action)
  54. {
  55.     WINDP        window;
  56.     BOOLEAN    erg;
  57.  
  58.     window = get_window(icon);
  59.     switch (action)
  60.     {
  61.         case DO_CLEAR    :
  62.         case DO_INFO    :
  63.         case DO_CLOSE    :
  64.             erg = window->opened;
  65.             break;
  66.         case DO_OPEN    :
  67.             erg = TRUE;
  68.             break;
  69.         case DO_DESTRUCT:
  70.             erg = TRUE;
  71.             break;
  72.         case DO_HELP    :
  73.             erg = TRUE;
  74.             break;
  75.         case DO_INIT    :
  76.             erg = TRUE;
  77.             break;
  78.         case DO_REINIT    :
  79.             erg = TRUE;
  80.             break;
  81.         default            :
  82.             erg = FALSE;
  83.     }
  84.     return erg;
  85. }
  86.  
  87. LOCAL WORD icon_edit(WORD icon, WORD action)
  88. {
  89.     WORD        erg = 1;
  90.     WINDOWP    window;
  91.     CICONBLK    *cicon;
  92.  
  93.     window = get_window(icon);
  94.     switch (action)
  95.     {
  96.         case DO_INIT    :
  97.             trash_text = new_text(icon);
  98.             cicon = (CICONBLK *)get_obspec(icons, ITRASH);
  99.             set_text_name(trash_text, cicon->monoblk.ib_ptext, TRUE);
  100.             create_window (KIND, CLASS_TRASH, icon, crt_trash);
  101.             break;
  102.         case DO_CLEAR  :
  103.             clear_text(trash_text);
  104.             trash_text->cursor = FALSE;
  105.             make_chg(itrash,TOTAL_CHANGE,0);
  106.             restore_edit();
  107.             break;
  108.         case DO_CLOSE    :
  109.             close_window(window);
  110.             break;
  111.         case DO_DESTRUCT:
  112.             destruct_window(window);
  113.             destruct_text(trash_text);
  114.             trash_text = NULL;
  115.             break;
  116.         case DO_OPEN    :
  117.             if (!open_trash(icon))
  118.                 erg = -1;
  119.             break;
  120.         case DO_INFO    :
  121.             info_edit(icon);
  122.             break;
  123.         case DO_HELP    :
  124.             note (1, HELPTRAS);
  125.             break;
  126.         case DO_REINIT :
  127.             trash_text = new_text(itrash);
  128.             cicon = (CICONBLK *)get_obspec(icons, ITRASH);
  129.             set_text_name(trash_text, cicon->monoblk.ib_ptext, TRUE);
  130.             create_window (KIND, CLASS_TRASH,itrash,crt_trash);
  131.             break;
  132.     }
  133.     return erg;
  134. }
  135.  
  136. /***************************************************************************/
  137. /* Auf den Papierkorb wurde ein Icon gezogen                                         */
  138. /***************************************************************************/
  139.  
  140. LOCAL BOOLEAN    icon_drag (WORD icon, WORD source)
  141. {
  142.     return (do_icon(source,DO_CLEAR)!=0);
  143. }
  144.  
  145. /***************************************************************************/
  146.  
  147. VOID trash_takes_text(RINGPTR r)
  148. {
  149.     TEXTP t_ptr = trash_text;
  150.  
  151.     kill_textring(&t_ptr->text);
  152.     t_ptr->text = *r;
  153.     FIRST(r)->vorg = &t_ptr->text.head;
  154.     LAST(r)->nachf = &t_ptr->text.tail;
  155.     t_ptr->cursor_line = FIRST(&t_ptr->text);
  156.     make_chg(itrash,TOTAL_CHANGE,0);
  157. }
  158.  
  159. /***************************************************************************/
  160.  
  161. LOCAL BOOLEAN wi_key(WINDOWP window, MKINFO *mk)
  162. {
  163.     return FALSE;
  164. }
  165.  
  166. /***************************************************************************/
  167. /* Kreieren eines Fensters                                                                    */
  168. /***************************************************************************/
  169.  
  170. LOCAL VOID crt_trash (WORD icon, WINDOWP window)
  171. {
  172.     WORD        initw, inith;
  173.     CICONBLK    *cicon;
  174.  
  175.     trash_text->cursor = FALSE;
  176.  
  177.     initw  = min ((desk.w / gl_wchar) * gl_wchar - 7 * gl_wchar, 80 * gl_wchar);
  178.     inith  = (desk.h / gl_hchar) * gl_hchar - 7 * gl_hchar;
  179.  
  180.     window->flags        = FLAGS;
  181.     window->doc.w        = MAX_LINE_LEN;
  182.     window->doc.h        = trash_text->text.lines;
  183.     window->xfac        = gl_wchar;
  184.     window->yfac        = gl_hchar;
  185.     window->w_width    = initw/gl_wchar;
  186.     window->w_hight    = inith/gl_hchar;
  187.     window->work.x        = sys_wchar;
  188.     window->work.y        = 42;
  189.     window->work.w        = initw;
  190.     window->work.h        = inith;
  191.     window->draw        = wi_draw_edit;    /* gleiche Routinen wie für EDIT */
  192.     window->key            = wi_key;
  193.     cicon = (CICONBLK *)get_obspec(icons, ITRASH);
  194.     set_wname(window, cicon->monoblk.ib_ptext);
  195. } /* crt_trash */
  196.  
  197. /***************************************************************************/
  198. /* Öffnen des Objekts                                                                        */
  199. /***************************************************************************/
  200.  
  201. LOCAL BOOLEAN open_trash (WORD icon)
  202. {
  203.     BOOLEAN    ok;
  204.     WINDOWP    window;
  205.  
  206.     window = get_window (icon);
  207.     if (window==NULL) return FALSE;
  208.  
  209.     if (window->opened)
  210.     /* Doppelklick auf Icon und Fenster ist schon offen */
  211.     {
  212.         top_window (window);
  213.         ok = TRUE;
  214.     }
  215.     else
  216.     {
  217.         ok = open_window(window);
  218.     }
  219.     return (ok);
  220. } /* open_trash */
  221.  
  222. /***************************************************************************/
  223.  
  224. VOID init_trash (VOID)
  225. {
  226.     CICONBLK    *cicon;
  227.  
  228.     trash_type = decl_icon_type(icon_test,icon_edit,icon_exist,icon_drag);
  229.     cicon = (CICONBLK *)get_obspec(icons, ITRASH);
  230.     itrash = add_icon_to_desk(ITRASH, cicon->monoblk.ib_ptext, -1, -1);
  231.     add_icon(trash_type,itrash);
  232. }
  233.